package com.fulihui.systemcore.api;

import java.util.List;

import org.near.servicesupport.request.BaseRequest;
import org.near.servicesupport.request.TRequest;
import org.near.servicesupport.result.BaseResult;
import org.near.servicesupport.result.TMultiResult;
import org.near.servicesupport.result.TSingleResult;

import com.fulihui.systemcore.dto.PosAreaDTO;
import com.fulihui.systemcore.dto.PosCityDTO;
import com.fulihui.systemcore.dto.PosProvinceDTO;
import com.fulihui.systemcore.request.citymodule.QueryProvincesCityByNameRequest;
import com.fulihui.systemcore.request.citymodule.SetHotCitiesRequest;
import com.fulihui.systemcore.response.citymodule.LocationResponse;

/**
 * 城市组件服务
 * @author leeson 2016年5月25日 下午12:01:52
 */
public interface CityModuleService {
    /**
     * 查询所有省份
     * @param request {@link BaseRequest}
     * @return 返回多个省份模型 {@link PosProvinceDTO}
     */
    TMultiResult<PosProvinceDTO> queryProvince(BaseRequest request);

    /**
     * 通过省份code 查询省下的城市
     * @param request 省份代码
     * @return 返回多个城市模型 {@link PosCityDTO}
     */
    TMultiResult<PosCityDTO> queryCity(TRequest<String> request);

    /**
     * 批量按城市代码查询城市信息
     * @param request 城市代码集合
     * @return 多个城市模型 {@link PosCityDTO}
     */
    TMultiResult<PosCityDTO> queryCitiesByCodes(TRequest<List<String>> request);

    /**
     * 通过城市code 查询城市下的所有地区
     * @param request 城市代码
     * @return 返回多个区域模型 {@link PosAreaDTO}
     */
    TMultiResult<PosAreaDTO> queryArea(TRequest<String> request);

    /**
     * 通过code 查询对应内容
     * @param request 省份、城市、区域任意代码
     * @return 返回单个查询结果 {@link LocationResponse}
     */
    TSingleResult<LocationResponse> queryByCode(TRequest<String> request);

    /**
     * 通过省份名称查询省份
     * @param request 省份名称
     * @return 返回单个省份模型 {@link PosProvinceDTO}
     */
    TSingleResult<PosProvinceDTO> queryProvinceByName(TRequest<String> request);

    /**
     * 通过城市名称查询城市
     * @param request {@link QueryProvincesCityByNameRequest}
     * @return 返回单个城市模型 {@link PosCityDTO}
     */
    TSingleResult<PosCityDTO> queryProvincesCityByName(QueryProvincesCityByNameRequest request);

    /**
     * 通过省份code 查询对应的省会城市
     * @param request 省份代码
     * @return 返回单个城市模型 {@link PosCityDTO}
     */
    TSingleResult<PosCityDTO> queryCapitalCityByProvinceCode(TRequest<String> request);

    /**
     * 查询热门城市
     * @param baseRequest 基础请求参数
     * @return 多个城市模型 {@link PosCityDTO}
     */
    TMultiResult<PosCityDTO> queryHotCities(BaseRequest baseRequest);

    /**
     * 通过城市代码批量设置是否热门
     * @param request {@link SetHotCitiesRequest}
     * @return 接口基础执行结果
     */
    BaseResult setHot(SetHotCitiesRequest request);
}